<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>块级作用域</title>
</head>
<body>
    
</body>
<script>
    /*
        在理解块级作用域之前先明白什么是语法块 -- 使用{}包裹起来的叫做语法块
            块级作用域表示的也就是在这个块级作用域中定义的变量只能够在这个语法块中使用   在其他语法块中是不能够访问到的
    */
    let t = 'love'
    {
        var hd = 'hds'
        let a ='jimmy'
        console.log(t)  //love
    }
    console.log(hd)  //hds
    {
        console.log(hd) // hds
        let b = 'xuexue'
        console.log(t) //love
        console.log(a)  //a is noy defined
    }
    console.log(a)  //a is not defined

    /*
        块级作用域这个概念只针对于使用 let 和 const 定义的变量
            而var是没有块级作用域的这个概念的  使用var定义了以后 其实相当于是在全局定义  就算是再块级作用域顶用var定义的变量  实质上系统也是理解成再全局定义的
                并且用var定义也没有常量和变量之分
            
            因为var是比较古老的时候定义变量的方式 那时候程序员还没有考虑到呢么多的问题  所以现在之后ES6出了let和const
    */
</script>   
</html>